/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.entity;

import br.jm.financeiro.filter.ConfiguraCampoAnnotation;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author joao
 */
@Entity
@Table(name = "empreendimento", catalog = "salao", schema = "public")
@NamedQueries({
    @NamedQuery(name = "Empreendimento.findAll", query = "SELECT e FROM Empreendimento e")})
public class Empreendimento implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "empreendimento_id_empreendimento_seq")
    @SequenceGenerator(name = "empreendimento_id_empreendimento_seq", sequenceName = "empreendimento_id_empreendimento_seq", initialValue = 1, allocationSize = 1)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_empreendimento", nullable = false)
    private Integer idEmpreendimento;
    @Size(max = 100)
    @Column(name = "dsc_empreendimento", length = 100)
    private String dscEmpreendimento;
    @Size(max = 100)
    @Column(name = "dsc_raz_nome", length = 100)
    private String dscRazNome;
    
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idAssunto.dscAssunto", campo = "dsc_assunto", nomeTabela = "empreendimento", nomeTabelJoin = "assunto")
    @Basic(optional = false)
    @Column(name = "tip_empreendimento", nullable = false, length = 1)
    private String tipEmpreendimento;
    @Basic(optional = false)
    @Column(name = "num_cpf_empreendimento", nullable = false, length = 18)
    private String numCpfEmpreendimento;
    @Column(name = "dat_update")
    @Temporal(TemporalType.TIMESTAMP)
    private Date datUpdate;
    @Size(max = 1)
    @Column(name = "tip_prioridade", length = 1,columnDefinition = "varchar(1) default 'N'")
    private String tipPrioridade;
    
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "numProcesso", campo = "num_processo", nomeTabela = "empreendimento", nomeTabelJoin = "empreendimento_lote")
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEmpreendimento")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<EmpreendimentoLote> empreendimentoLoteList;
    
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idCliente.nomFantasia", campo = "nom_fantasia", nomeTabela = "empreendimento", nomeTabelJoin = "cliente")
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEmpreendimento")
    @LazyCollection(LazyCollectionOption.FALSE)
    @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private List<EmpreendimentoEndereco> empreendimentoEnderecoList;
    
    @JoinColumn(name = "id_cliente", referencedColumnName = "id_cliente", nullable = false)
    @ManyToOne(optional = false)
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idCliente.nomCliente", campo = "nom_cliente", nomeTabela = "empreendimento", nomeTabelJoin = "cliente")
    private Cliente idCliente;
    
    @ConfiguraCampoAnnotation(tipo = "String", pesquisa = "idCliente.staCliente", campo = "sta_cliente", nomeTabela = "empreendimento", nomeTabelJoin = "cliente")
    @JoinColumn(name = "id_custo", referencedColumnName = "id_custo", nullable = false)
    @ManyToOne(optional = false, cascade = CascadeType.ALL)
    private CentroCusto idCusto;
    
    @Transient
    private String numProcesso;
    @Transient
    private String dscLote;
    @Size(max = 10)
    @Column(name = "emp_color", length = 10)
    private String empColor;
    @Transient
    private String dscTipo;
    
    @Size(max = 10)
    @Column(name = "emp_loc", length = 10)
    private String empLoc;
    @Size(max = 10)
    @Column(name = "emp_sit", length = 10)
    private String empSit;
    @Size(max = 10)
    @Column(name = "emp_proc", length = 10)
    private String empProc;
    @Size(max = 10)
    @Column(name = "emp_ass", length = 10)
    private String empAss;
    @Size(max = 10)
    @Column(name = "emp_com", length = 10)
    private String empCom;
    @Size(max = 10)
    @Column(name = "emp_des", length = 10)
    private String empDes;
    @Size(max = 10)
    @Column(name = "emp_err", length = 10)
    private String empErr;
    @Size(max = 1)
    @Column(name = "sta_empreendimento", length = 1)
    private String staEmpreendimento;
    @Size(max = 50)
    @Column(name = "nom_arquiteto", length = 50)
    private String nomArquiteto;
    
    @Transient
    private String dscStaEmpreendimento;

    public Empreendimento() {
    }

    public Empreendimento(Integer idEmpreendimento) {
        this.idEmpreendimento = idEmpreendimento;
    }

    public Integer getIdEmpreendimento() {
        return idEmpreendimento;
    }

    public void setIdEmpreendimento(Integer idEmpreendimento) {
        this.idEmpreendimento = idEmpreendimento;
    }

    public String getDscEmpreendimento() {
        return dscEmpreendimento;
    }

    public void setDscEmpreendimento(String dscEmpreendimento) {
        this.dscEmpreendimento = dscEmpreendimento;
    }

    public List<EmpreendimentoLote> getEmpreendimentoLoteList() {
        return empreendimentoLoteList;
    }

    public void setEmpreendimentoLoteList(List<EmpreendimentoLote> empreendimentoLoteList) {
        this.empreendimentoLoteList = empreendimentoLoteList;
    }

    public Cliente getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Cliente idCliente) {
        this.idCliente = idCliente;
    }

    public String getNumProcesso() {
        return numProcesso;
    }

    public void setNumProcesso(String numProcesso) {
        this.numProcesso = numProcesso;
    }

    public String getEmpColor() {
        return empColor;
    }

    public void setEmpColor(String empColor) {
        this.empColor = empColor;
    }

    public String getTipEmpreendimento() {
        return tipEmpreendimento;
    }

    public void setTipEmpreendimento(String tipEmpreendimento) {
        this.tipEmpreendimento = tipEmpreendimento;
    }

    public String getNumCpfEmpreendimento() {
        return numCpfEmpreendimento;
    }

    public void setNumCpfEmpreendimento(String numCpfEmpreendimento) {
        this.numCpfEmpreendimento = numCpfEmpreendimento;
    }

    public List<EmpreendimentoEndereco> getEmpreendimentoEnderecoList() {
        return empreendimentoEnderecoList;
    }

    public void setEmpreendimentoEnderecoList(List<EmpreendimentoEndereco> empreendimentoEnderecoList) {
        this.empreendimentoEnderecoList = empreendimentoEnderecoList;
    }

    public String getDscLote() {
        return dscLote;
    }

    public void setDscLote(String dscLote) {
        this.dscLote = dscLote;
    }

    public Date getDatUpdate() {
        return datUpdate;
    }

    public void setDatUpdate(Date datUpdate) {
        this.datUpdate = datUpdate;
    }

    public String getEmpLoc() {
        return empLoc;
    }

    public void setEmpLoc(String empLoc) {
        this.empLoc = empLoc;
    }

    public String getEmpSit() {
        return empSit;
    }

    public void setEmpSit(String empSit) {
        this.empSit = empSit;
    }

    public String getEmpProc() {
        return empProc;
    }

    public void setEmpProc(String empProc) {
        this.empProc = empProc;
    }

    public String getEmpAss() {
        return empAss;
    }

    public void setEmpAss(String empAss) {
        this.empAss = empAss;
    }

    public String getEmpCom() {
        return empCom;
    }

    public void setEmpCom(String empCom) {
        this.empCom = empCom;
    }

    public String getEmpDes() {
        return empDes;
    }

    public void setEmpDes(String empDes) {
        this.empDes = empDes;
    }

    public String getDscTipo() {
        if (this.tipEmpreendimento != null) {
            if (this.tipEmpreendimento.equals("F")) {
                this.dscTipo = "Física";
            } else {
                this.dscTipo = "Jurídica";
            }
        }
        return dscTipo;
    }

    public void setDscTipo(String dscTipo) {
        this.dscTipo = dscTipo;
    }

    public String getDscRazNome() {
        return dscRazNome;
    }

    public void setDscRazNome(String dscRazNome) {
        this.dscRazNome = dscRazNome;
    }

    public String getStaEmpreendimento() {
        return staEmpreendimento;
    }

    public void setStaEmpreendimento(String staEmpreendimento) {
        this.staEmpreendimento = staEmpreendimento;
    }

    public String getDscStaEmpreendimento() {
        if (this.staEmpreendimento != null) {
            if (this.staEmpreendimento.equals("A")) {
                this.dscStaEmpreendimento = "Ativo";
            } else if (this.staEmpreendimento.equals("P")) {
                this.dscStaEmpreendimento = "Prospects";
            } else {
                this.dscStaEmpreendimento = "Inativo"; 
            }
        } else {
            this.dscStaEmpreendimento = "Inativo";
        }
        return dscStaEmpreendimento;
    }

    public void setDscStaEmpreendimento(String dscStaEmpreendimento) {
        this.dscStaEmpreendimento = dscStaEmpreendimento;
    }

    public String getNomArquiteto() {
        return nomArquiteto;
    }

    public void setNomArquiteto(String nomArquiteto) {
        this.nomArquiteto = nomArquiteto;
    }

    public String getTipPrioridade() {
        return tipPrioridade;
    }

    public void setTipPrioridade(String tipPrioridade) {
        this.tipPrioridade = tipPrioridade;
    }

    public CentroCusto getIdCusto() {
        return idCusto;
    }

    public void setIdCusto(CentroCusto idCusto) {
        this.idCusto = idCusto;
    }

    public String getEmpErr() {
        return empErr;
    }

    public void setEmpErr(String empErr) {
        this.empErr = empErr;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idEmpreendimento != null ? idEmpreendimento.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Empreendimento)) {
            return false;
        }
        Empreendimento other = (Empreendimento) object;
        if ((this.idEmpreendimento == null && other.idEmpreendimento != null) || (this.idEmpreendimento != null && !this.idEmpreendimento.equals(other.idEmpreendimento))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.jm.financeiro.entity.Empreendimento[ idEmpreendimento=" + idEmpreendimento + " ]";
    }
}
